// 定义和广告相关的接口
const express = require('express')
const router = express.Router()

// 引入广告的model对象
const advModel = require('../db/models/advModel')
const adminModel = require('../db/models/model')

// 引入tokenManger
const tokenManger = require('../utils/token')

// 定义一个中间件
async function vertifyToken(req, res, next) {
  // 从请求头中获取token
  const token = req.get('token')
  // 如果浏览器上传token就是一个有内容的字符串,如果没有上传就是undefined
  if (token) {
    // 说明上传token,要继续判断数据中的token和当前token是否一致
    // 如果找到了是当前登录用户的信息对象,如果找不到就是null
    const admin = await adminModel.findOne({ token })
    if (admin) {
      // 校验token的有效期
      // 解析token,拿到生成token的时间戳,和当前时间进行对比,如果超过30分钟,则认为登录超过,如果没有超过30分钟,则认为登录有效
      const result = tokenManger.decodeToken(token)
      // 半小时的毫秒值 1000 * 60 * 30
      const validTime = 1000 * 60 * 30
      if (Date.now() - result.expires < validTime) {
        // token有效
        next()
      } else {
        // token无效
        res.redirect('/login')
      }
    } else {
      // 说明token不一致
      res.redirect('/login')
    }
  } else {
    // 说明没有上传token
    res.redirect('/login')
  }
}

// 添加广告
router.post('/addAdv', vertifyToken, async function (req, res) {
  // 接收表单上传的数据
  const { advTitle, advCate, advLink } = req.fields
  const { file } = req.files
  // 根据上传的文件,截取文件的文件名
  const filename = file.path.split('\\')[2]
  // 拼接可以访问到这个文件的url地址
  // http://localhost:5001/uploadDir/图片的名称
  const advImg = `http://localhost:5001/uploadDir/${filename}`

  // 将这些广告信息,存储到广告的集合中
  await advModel.create({ advTitle, advCate, advLink, advImg })
  res.send({ status: 'ok', message: '广告添加成功' })
})

module.exports = router
